package com.jn.erp.wechat.mp.controller;

import cn.hutool.core.util.StrUtil;
import com.jn.erp.common.core.result.AjaxResult;
import com.jn.erp.wechat.mp.entity.MsgParam;
import com.jn.erp.wechat.mp.entity.ReceiveMessage;
import com.jn.erp.wechat.mp.handler.MpInfoHandler;
import com.jn.erp.wechat.mp.service.ReceiveEventsService;
import com.jn.erp.wechat.mp.utils.AuthUtil;
import com.jn.erp.wechat.mp.utils.XMLUtil;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;

/**
 * <pre>
 *  用于公众页面授权相关接口
 * </pre>
 *
 * @author sunjiyong
 * @since 2024/11/6 11:35
 */
@AllArgsConstructor
@RestController
@RequestMapping("/wxauth")
public class WechatAuthenticationController {

    private static final String TOKEN = "YjIS9hvaYJObmrow";// 替换为你的Token

    @Autowired
    private MpInfoHandler mpInfoHandler;


    @Autowired
    private ReceiveEventsService receiveEventsService;
//
//    @Autowired
//    private WxAccessService wxAccessService;



    /**
     * 服务号认证
     */
    @GetMapping("/auth")
    public String verifyToken(@RequestParam("signature") String signature, @RequestParam("timestamp") String timestamp, @RequestParam("nonce") String nonce, @RequestParam("echostr") String echostr) {
        // 1.排序参数
        String[] arr = new String[]{TOKEN, timestamp, nonce};
        Arrays.sort(arr);
        // 2.拼接字符串
        StringBuilder sb = new StringBuilder();
        for (String s : arr) {
            sb.append(s);
        }
        // 3.SHA1加密
        String tempstr = AuthUtil.sha1(sb.toString());
        //4.验证isignature
        if (tempstr.equals(signature)) {
            return echostr;     //返回echostr，表明验证成功
        } else {
            return "error";
        }
    }

    /**
     * 家长端-通知二维码创建
     */
    @PostMapping("/noticeQrcode")
    public AjaxResult noticeQrcode(@RequestBody MsgParam msgParam) {
        String s=mpInfoHandler.qrcodeCreate("notice_"+msgParam.getSceneStr());
        System.out.println(s);
        if(StrUtil.isNotBlank(s)){
            return AjaxResult.success("操作成功",s);
        }else{
            return AjaxResult.error("调用接口失败");
        }
    }


//    /**
//     * 手机号绑定通知二维码创建
//     */
//    @PostMapping("/mobileQrcode")
//    public AjaxResult mobileQrcode(@RequestBody MsgParam msgParam) {
//        String s=mpInfoHandler.qrcodeCreate("mobile_"+msgParam.getSceneStr());
//        System.out.println(s);
//        if(StrUtil.isNotBlank(s)){
//            return AjaxResult.success(s);
//        }else{
//            return AjaxResult.error("调用接口失败");
//        }
//    }


    /**
     * 二维码创建
     */
    @PostMapping("/qrcode")
    public AjaxResult qrcodeCreate(@RequestBody MsgParam msgParam) {
        String s=mpInfoHandler.qrcodeCreate(msgParam.getSceneStr());
        System.out.println(s);
        if(StrUtil.isNotBlank(s)){
            return AjaxResult.success(s);
        }else{
            return AjaxResult.error("调用接口失败");
        }
    }


    /**
     * 设置的服务器地址 接收事件
     */
    @PostMapping("/auth")
    public String receiveEvents(@RequestBody String xml) {
//        System.out.println("requestbody:----" + xml);

        ReceiveMessage reCell=receiveEventsService.events(xml);
        if(StrUtil.isBlank(reCell.getContent())){
            return null;
        }else{
            String reCellStr = XMLUtil.buildResponseMessage(reCell);
            return reCellStr;
        }
    }



//    /**
//     * 手机号绑定服务号openId
//     */
//    @GetMapping("/bind")
//    public AjaxResult bind(@RequestParam Map param) {
//        if (param.containsKey("code") && param.containsKey("mobile")) {
//            String code = param.get("code").toString();
//            String mobile = param.get("mobile").toString();
//            if (StrUtil.isNotBlank(code) && StrUtil.isNotBlank(mobile)) {
//
//                WxOAuth2AccessToken auth2AccessToken = mpInfoHandler.oAuth2AccessToken(code);
//                String mpOpenId = auth2AccessToken.getOpenId();
//                String unionId = auth2AccessToken.getUnionId();
//
//                QueryWrapper<WxAccess> qwacc = new QueryWrapper<>();
//                qwacc.eq("openid", mpOpenId);
//                List<WxAccess> accessList = wxAccessService.list(qwacc);
//                Long accessId = 0l;
//                if (accessList.size() == 0) {
//                    WxAccess access = new WxAccess();
//                    access.setAddTime(LocalDateTime.now());
//                    access.setOpenid(mpOpenId);
//
//                    access.setNickname("服务号用户");
//                    access.setRegFrom("mp-jn");
//                    wxAccessService.save(access);
//                    accessId = access.getId();
//                } else {
//                    WxAccess one = accessList.get(0);
//                    one.setLatestLogin(LocalDateTime.now());
//                    one.setUnionid(unionId);
//                    wxAccessService.updateById(one);
//                    accessId = one.getId();
//                }
//
//                QueryWrapper<WxMpUser> qwm = new QueryWrapper<>();
//                qwm.eq("openid", mpOpenId);
//                List<WxMpUser> mpusers = wxMpUserService.list(qwm);
//                if (mpusers.size() == 0) {
//                    WxMpUser mpuser = new WxMpUser();
//                    mpuser.setOpenid(mpOpenId);
//                    mpuser.setMobile(mobile);
//                    mpuser.setAccessId(accessId);
//                    wxMpUserService.save(mpuser);
//                } else {
//                    WxMpUser wxMpUser = mpusers.get(0);
//                    wxMpUser.setMobile(mobile);
//                    wxMpUser.setAccessId(accessId);
//                    wxMpUserService.updateById(wxMpUser);
//                }
//                return AjaxResult.success(param);
//            } else {
//                return AjaxResult.error("所传参数有误！");
//            }
//
//        } else {
//            return AjaxResult.error("接口信息有误！");
//        }
//
//
//    }















}
